﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Web;
using System.Web.Mvc;
using MaguenBrokersMVC.Models;


namespace MaguenBrokersMVC.Controllers
{
    public class SegurosViajeController : Controller
    {
        private readonly MaguenDb db = new MaguenDb();

        [ChildActionOnly]
        public ActionResult CotizarPartial()
        {
            ViewBag.TipoViajeId = new SelectList(db.TiposViaje, "Id", "Nombre", 1);
            ViewBag.OrigenId = new SelectList(db.Origenes, "Id", "Nombre", 1);
            ViewBag.DestinoId = new SelectList(db.Destinos, "Id", "Nombre", 1);
            return PartialView("_Cotizar");
        }
        private bool EnviarEmail(SeguroViajes seguroViajes)
        {
            var tipoViaje = db.TiposViaje.Single(x => x.Id == seguroViajes.TipoViajeId);
            var origen = db.Origenes.Single(x => x.Id == seguroViajes.OrigenId);
            var destino = db.Destinos.Single(x => x.Id == seguroViajes.DestinoId);

            var emMailMessage = new MailMessage();

            emMailMessage.To.Add(new MailAddress("leandro@skidelsky.com.ar"));

            emMailMessage.From = new MailAddress(seguroViajes.Email);

            emMailMessage.Subject = "Requerimiento Pagina Web Seguro de Viajes";

            emMailMessage.Body = "Hola Leandro, has recibido un requerimiento de un clinte, a continuación están los detalles. " +
                                 "\n " +
                                 "Apellido y nombre: " + seguroViajes.Apellido + " " + seguroViajes.Nombre +
                                 "\n " +
                                 "Email: " + seguroViajes.Email +
                                 "\n " +
                                 "Tipo de viaje: " + tipoViaje.Nombre +
                                 "\n " +
                                 "País Origen: " + origen.Nombre +
                                 "\n " +
                                 "Destino: " + destino.Nombre +
                                 "\n " +
                                 "Fecha Salida: " + seguroViajes.FechaSalida.ToShortDateString() +
                                 "\n " +
                                 "Fecha de Regrso: " + seguroViajes.FechaRegreso.ToShortDateString() +
                                 "\n " +
                                 "Edades: " + seguroViajes.Edades.Edad1 + " " + seguroViajes.Edades.Edad2 + " " + seguroViajes.Edades.Edad3 + " " + seguroViajes.Edades.Edad4 + " " + seguroViajes.Edades.Edad5;

            emMailMessage.IsBodyHtml = false;

            emMailMessage.Priority = MailPriority.High;

            var emMailMessage2 = new MailMessage();

            emMailMessage2.To.Add(new MailAddress(seguroViajes.Email));

            emMailMessage2.From = new MailAddress(seguroViajes.Email);

            emMailMessage2.Subject = "Requerimiento Pagina Web Seguro de Viajes";

            emMailMessage2.Body = "Hola " + seguroViajes.Nombre + ", Gracias por contactarte con Maguen Brokers Asesores de Seguros, tu cotización se está presupuestando, a la brevedad nos contactaremos contigo. ";

            emMailMessage2.IsBodyHtml = false;

            emMailMessage2.Priority = MailPriority.High;

            var smtpClient = new SmtpClient
                                 {
                                     Host = "smtp.gmail.com",
                                     Port = 587,
                                     Credentials =
                                         new NetworkCredential("vidadigital.chaco.info@gmail.com", "vidadigital.chaco"),
                                     EnableSsl = true
                                 };

            try
            {
                smtpClient.Send(emMailMessage);
                smtpClient.Send(emMailMessage2);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        [HttpPost]
        public ActionResult CotizarPartial(SeguroViajes seguroviajes)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    db.SegurosViajes.Add(seguroviajes);
                    db.SaveChanges();
                    ViewBag.TipoViajeId = new SelectList(db.TiposViaje, "Id", "Nombre", seguroviajes.TipoViajeId);
                    ViewBag.OrigenId = new SelectList(db.Origenes, "Id", "Nombre", seguroviajes.OrigenId);
                    ViewBag.DestinoId = new SelectList(db.Destinos, "Id", "Nombre", seguroviajes.DestinoId);
                    if (EnviarEmail(seguroviajes))
                    {
                        ViewBag.Message = "Operación exitosa. En breve nos comunicaremos con Ud.";
                        ViewBag.Color = "Green";
                    }
                    else
                    {
                        ViewBag.Message = "No se pudo enviar el correo electrónico.";
                        ViewBag.Color = "Red";
                    }
                    return PartialView("_Cotizar", new SeguroViajes { Apellido = "", Nombre = "", Email = "", Edades = new Edades { Edad1 = 0, Edad2 = 0, Edad3 = 0, Edad4 = 0, Edad5 = 0 }, FechaRegreso = DateTime.Now, FechaSalida = DateTime.Now });
                }
                catch (Exception ex)
                {
                    ViewBag.Message = "ERROR!";
                    ViewBag.Color = "Red";
                    return PartialView("_Cotizar", new SeguroViajes { Apellido = "", Nombre = "", Email = "", Edades = new Edades { Edad1 = 0, Edad2 = 0, Edad3 = 0, Edad4 = 0, Edad5 = 0 }, FechaRegreso = DateTime.Now, FechaSalida = DateTime.Now });

                }
            }

            ViewBag.TipoViajeId = new SelectList(db.TiposViaje, "Id", "Nombre", seguroviajes.TipoViajeId);
            ViewBag.OrigenId = new SelectList(db.Origenes, "Id", "Nombre", seguroviajes.OrigenId);
            ViewBag.DestinoId = new SelectList(db.Destinos, "Id", "Nombre", seguroviajes.DestinoId);
            return PartialView("_Cotizar", seguroviajes);
        }

        public ViewResult Principal()
        {
            return View();
        }

        //
        // GET: /SegurosViaje/
        [Authorize]
        public ViewResult Index()
        {
            var segurosviajes = db.SegurosViajes.Include(s => s.TipoViaje).Include(s => s.Origen).Include(s => s.Destino);
            return View(segurosviajes.ToList());
        }

        //
        // GET: /SegurosViaje/Details/5
        [Authorize]
        public ViewResult Details(int id)
        {
            SeguroViajes seguroviajes = db.SegurosViajes.Find(id);
            return View(seguroviajes);
        }


        //
        // GET: /SegurosViaje/Create

        public ActionResult Cotizar()
        {
            ViewBag.TipoViajeId = new SelectList(db.TiposViaje, "Id", "Nombre", 1);
            ViewBag.OrigenId = new SelectList(db.Origenes, "Id", "Nombre", 1);
            ViewBag.DestinoId = new SelectList(db.Destinos, "Id", "Nombre", 1);
            return View(new SeguroViajes { FechaRegreso = DateTime.Now, FechaSalida = DateTime.Now });
        }

        //
        // POST: /SegurosViaje/Create

        [HttpPost]
        public ActionResult Cotizar(SeguroViajes seguroviajes)
        {
            if (ModelState.IsValid)
            {
                db.SegurosViajes.Add(seguroviajes);
                db.SaveChanges();
                return View(new SeguroViajes { FechaRegreso = DateTime.Now, FechaSalida = DateTime.Now });
            }

            ViewBag.TipoViajeId = new SelectList(db.TiposViaje, "Id", "Nombre", seguroviajes.TipoViajeId);
            ViewBag.OrigenId = new SelectList(db.Origenes, "Id", "Nombre", seguroviajes.OrigenId);
            ViewBag.DestinoId = new SelectList(db.Destinos, "Id", "Nombre", seguroviajes.DestinoId);
            return View(seguroviajes);
        }

        //
        // GET: /SegurosViaje/Edit/5
        [Authorize]
        public ActionResult Edit(int id)
        {
            SeguroViajes seguroviajes = db.SegurosViajes.Find(id);
            ViewBag.TipoViajeId = new SelectList(db.TiposViaje, "Id", "Nombre", seguroviajes.TipoViajeId);
            ViewBag.OrigenId = new SelectList(db.Origenes, "Id", "Nombre", seguroviajes.OrigenId);
            ViewBag.DestinoId = new SelectList(db.Destinos, "Id", "Nombre", seguroviajes.DestinoId);
            return View(seguroviajes);
        }

        //
        // POST: /SegurosViaje/Edit/5
        [Authorize]
        [HttpPost]
        public ActionResult Edit(SeguroViajes seguroviajes)
        {
            if (ModelState.IsValid)
            {
                db.Entry(seguroviajes).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.TipoViajeId = new SelectList(db.TiposViaje, "Id", "Nombre", seguroviajes.TipoViajeId);
            ViewBag.OrigenId = new SelectList(db.Origenes, "Id", "Nombre", seguroviajes.OrigenId);
            ViewBag.DestinoId = new SelectList(db.Destinos, "Id", "Nombre", seguroviajes.DestinoId);
            return View(seguroviajes);
        }

        //
        // GET: /SegurosViaje/Delete/5
        [Authorize]
        public ActionResult Delete(int id)
        {
            SeguroViajes seguroviajes = db.SegurosViajes.Find(id);
            return View(seguroviajes);
        }

        //
        // POST: /SegurosViaje/Delete/5
        [Authorize]
        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            SeguroViajes seguroviajes = db.SegurosViajes.Find(id);
            db.SegurosViajes.Remove(seguroviajes);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}